package main

import "fmt"

func findAnagrams(s, p string) (ans []int) {
	cnt := [26]int{} // 统计 p 的每种字母的出现次数
	for _, c := range p {
		cnt[c-'a']++
	}
	left := 0
	for right, c := range s {
		c -= 'a'
		cnt[c]--         // 右端点字母进入窗口
		for cnt[c] < 0 { // 字母 c 太多了
			cnt[s[left]-'a']++ // 左端点字母离开窗口
			left++
		}
		if right-left+1 == len(p) { // s' 和 p 的每种字母的出现次数都相同
			ans = append(ans, left) // s' 左端点下标加入答案
		}
	}
	return
}

func main() {
	s, p := "cbaebabacd", "abc"
	ans := findAnagrams(s, p)
	fmt.Println(ans)
}
